import {reqShopCart, reqShopCartList, reqUpdateOneIsChecked, reqUpdateAllIsChecked,reqDeleteShopCart,reqDeleteAllShopCart} from '@/api'

const state = {
    shopCartList: []
}
const mutations = {
    RECEIVE_SHOPCARTLIST(state, shopCartList) {
        state.shopCartList = shopCartList
    }
}
const actions = {
    /*
      async 函数 是异步函数 函数内部有异步操作
        async函数 返回值一定是promise对象 不看return
        promise对象有状态有结果,这个promise对象是成功还是失败 要看return
        return的值  promise对象 非promise对象
            如果return后面是一个非promise的值
                1.返回正常值,那就代表async函数返回的promise是成功的,成功的结果就是return返回的值
                2.抛异常 throw new Error('失败') 代表async函数返回的promise是失败的.失败的原因就是你抛出的原因
            如果return后面是一个promise的值
                1.返回的是成功的promise 那么代表async函数返回的是promise是成功,成功的结果是return后面返回的promise成功的结果
                2.返回的是失败的promise,那么代表async函数返回的是promise是失败.失败的结果是return后面返回的promise失败的原因

    */
    //添加个更新购物车
    async addShopCart({commit}, {skuId, skuNum}) {//花括号在形参的位置是解构赋值 比如{skuId,skuNum} {commit}
        const result = await reqShopCart(skuId, skuNum)
        if (result.code === 200) {
            return 'ok'
        } else {
            return Promise.reject(new Error('failed'))
        }
    },
    //获取购物车列表
    async getShopCartList({commit}) {
        const result = await reqShopCartList()
        if (result.code === 200) {
            commit('RECEIVE_SHOPCARTLIST', result.data)
        }
    },
    //更改单个购物车选中状态
    async updateOneIsChecked({commit}, {skuId, isChecked}) {
        const result = await reqUpdateOneIsChecked(skuId, isChecked)
        if (result.code === 200) {
            return 'ok'
        } else {
            return Promise.reject(new Error('failed'))
        }
    },
    //请求修改多个的选中状态
    async updateAllIsChecked({commit}, {isChecked, skuIds}) {
        const result = await reqUpdateAllIsChecked(isChecked, skuIds)
        if (result.code === 200) {
            return 'ok'
        }else {
            return Promise.reject(new Error('failed'))
        }
    },
//请求删除单个的购物车
    async deleteOneShopCart({commit},skuId){
        const result=await reqDeleteShopCart(skuId)
        if (result.code===200){
            return 'ok'
        }else {
            return Promise.reject(new Error('failed'))
        }
    },
    //批量删除购物车信息
    async deleteAllShopCart({commit},skuIds){
        const  result= await reqDeleteAllShopCart(skuIds)
        if (result.code===200){
      return 'ok'
        }else {
            return  Promise.reject(new Error('failed'))
        }
    }
}
const getters = {}
export default {
    state,
    mutations,
    actions,
    getters
}
